/*
 * @Date: 2025-02-13 15:52:18
 * @Author: LiSong
 * @LastEditors: LiSong
 * @LastEditTime: 2025-02-18 10:28:06
 * @Description: 事件属性相关处理
 */
import { executeFuncText } from '@hp/utils/executeFunc.js'

import { useUserStore } from '@/stores/modules';
import { useRoute, useRouter } from 'vue-router'
import { useTagsViewRoutes } from '@/stores/tagsViewRoutes';

/**
 * 通用的事件使用方法
 * 
 * @param {Object} opts 
 */
export const useEventFunc = (opts = {}) => {
  const { tagsViewRoutes: routes } = useTagsViewRoutes()
  const route = useRoute()
  const router = useRouter()
  const userInfo = useUserStore().userInfo
  const eventState = { ...opts, userInfo  }

  /**
   * 执行点击事件
   * 
   * @param {Any} data 当前面板的数据
   * @param {Object} config funcKey otherData 其他数据（额外的数据）
   * @returns 
   */
  const onClick = (data, config={}) => {
    const funcText = config.funcKey ? opts.schema[config.funcKey] : opts.schema.onClick
    if (!funcText) return
    if (opts.design) return
    /*
      执行参数说明：
      this->{
        data->当前面板的数据
        route-当前路由
        routes-路由数据集
        router-路由对象
        params->传递的参数
        getPanelRef->获取面板的对象
        ElMessage->消息提示
        pluginManager->面板管理类
      }
      data->当前面板的数据
      params->{
        design->是否为设计模式
        layout->当前面板的布局
        schema->当前面板的配置
        userInfo->用户信息
        otherData->其他数据
      }
    */
    const params = { ...eventState }
    if (config.otherData) { params.otherData = config.otherData }
    executeFuncText(funcText, {
      errorTip: 'onClick函数解析出错！',
      paramNames: ['data', 'params'],
      paramObjects: {
        data,
        route,
        routes,
        router,
        params,
      }
    })
  }
  /**
   * 获取事件的样式类
   * 
   * @param {String} funcKey 事件标识
   * @returns 
   */
  const onClickClass = (funcKey='onClick') => {
    const funcText = opts.schema[funcKey]
    if (!funcText) return ''
    // if (opts.design) return ''
    return 'pointer'
  }

  return {
    onClick,
    onClickClass
  }
}